// 这是一个在窗体中创建复选框的实例，其触发事件和触发按钮完全相同，也是toggle
// 复选框又被称为检查按钮，其和触发按钮的主要差别在于图像（外观）的表现上
// 可以使用gtk_check_button和gtk_check_button_with_label函数来创建一个复选框
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>

void button_deal(GtkWidget *widget, gpointer *data){
	// 输出按键状态
	g_print("Button Event:%s\n", data);
}

int main(int argc, char *argv[]){
	
	GtkWidget *window,*check_button,*check_button2;
	char title[] = "check_button_test";

	// 初始化窗体函数
	gtk_init(&argc,&argv);
	// 创建窗体函数
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	// 设置窗体的title和大小、位置
	gtk_window_set_title(GTK_WINDOW(window),title);

	gtk_widget_set_usize(window,300,150);
	gtk_widget_set_uposition(window,200,200);
	// 设置窗体的退出函数，如果使用自身的函数则使用G_CALLBACK，如果使用自己创建的函数则使用GTK_SIGNAL_FUNC
	gtk_signal_connect(GTK_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);

	// 创建复选框
	check_button = gtk_check_button_new_with_label(title);
	// 测试是否可以创建两个窗体,编译可以通过，但是运行会报错，因为一个窗体中只能存在一个构件，可以使用box来创建多个构件
	check_button2 = gtk_check_button_new_with_label("check_button2");
	// 登记按钮的pressed\released\enter\clicked\leave\toggle
	/*
	gtk_signal_connect(GTK_OBJECT(check_button),"pressed",GTK_SIGNAL_FUNC(button_deal),"pressed");
	gtk_signal_connect(GTK_OBJECT(check_button),"released",GTK_SIGNAL_FUNC(button_deal),"released");
	gtk_signal_connect(GTK_OBJECT(check_button),"enter",GTK_SIGNAL_FUNC(button_deal),"enter");
	gtk_signal_connect(GTK_OBJECT(check_button),"clicked",GTK_SIGNAL_FUNC(button_deal),"clicked");
	gtk_signal_connect(GTK_OBJECT(check_button),"leave",GTK_SIGNAL_FUNC(button_deal),"leave");
	// toggle事件触发按钮会报错，但是不知道报错的具体原因？可能是因为初始化失败
	gtk_signal_connect(GTK_OBJECT(check_button),"toggle",GTK_SIGNAL_FUNC(button_deal),"toggle");
	*/

	gtk_signal_connect(GTK_OBJECT(check_button),"pressed",G_CALLBACK(button_deal),"pressed");
	gtk_signal_connect(GTK_OBJECT(check_button),"released",G_CALLBACK(button_deal),"released");
	gtk_signal_connect(GTK_OBJECT(check_button),"enter",G_CALLBACK(button_deal),"enter");
	gtk_signal_connect(GTK_OBJECT(check_button),"clicked",G_CALLBACK(button_deal),"clicked");
	gtk_signal_connect(GTK_OBJECT(check_button),"leave",G_CALLBACK(button_deal),"leave");
	// toggle事件触发按钮会报错，但是不知道报错的具体原因？可能是因为初始化失败
	gtk_signal_connect(GTK_OBJECT(check_button),"toggle",G_CALLBACK(button_deal),"toggle");
	// 将按钮加入到窗体中
	gtk_container_add(GTK_CONTAINER(window),check_button);
	gtk_container_add(GTK_CONTAINER(window),check_button2);
	gtk_widget_show(check_button);
	gtk_widget_show(check_button);
	gtk_widget_show(window);
	gtk_main();

	return 0;
}


